//
//  VVHomeViewModel.swift
//  Weibo
//
//  Created by 王惠平 on 2017/3/31.
//  Copyright © 2017年 Will Wang. All rights reserved.
//

import UIKit
import SDWebImage

class VVHomeViewModel: NSObject {
    
    //数据源
    lazy var statusList: [VVStatusViewModel] = [VVStatusViewModel]()
    
    //获取首页数据
    func requestHomeData(isPullup: Bool, callBack:@escaping(Bool, String)->()) {
        
        //默认的上拉加载的微博id
        var maxId: Int64 = 0
        
        //默认的下拉刷新的微博id
        var sinceId: Int64 = 0
        
        if  isPullup {
            
            //如果是上拉刷新获取数组的最后一个元素
            maxId = statusList.last?.status?.id ?? 0
            
            //结局数据重复问题
            if maxId > 0 {
                
                maxId -= 1
            }
            
        } else {
            
            //下拉刷新
            sinceId = statusList.first?.status?.id ?? 0
            
        }
        
        var message = "没有加载到最新的微博数据"
        
        VVNetworkTools.sharedTools.requestHomeData(accessToken: VVUserAccountViewModel.sharedViewModel.accessToken!, maxId: maxId, sinceId: sinceId) { (response, error) in
            
            if error != nil {
                
                print("网络请求异常:\(String(describing: error))")
                
                callBack(false, message)
                return
                
            }
            
            guard let dic = response as? [String: Any] else {
                
                print("数据格式异常")
                
                callBack(false,message)
                
                return
            }
            
            //代码执行到此表示没有问题
            let statusDicArray = dic["statuses"] as! [[String: Any]]
            
            //数组字典转模型
            let statusArray = NSArray.yy_modelArray(with: VVStatus.self, json: statusDicArray) as! [VVStatus]
            
            var tempArray: [VVStatusViewModel] = [VVStatusViewModel]()
            
            //创建调度组
            let group = DispatchGroup()
            
            //遍历数组模型转成对应数组viewModel类型
            for status in statusArray {
                
                let statusViewModel = VVStatusViewModel()
                
                //关联微博模型数据
                statusViewModel.status = status
                
                //添加到指定数组
                tempArray.append(statusViewModel)
                
                //判断原创微博和转发微博是否有单张图片
                if status.pic_urls?.count == 1 {
                    
                    //加入到调度主
                    group.enter()
                    
                    //获取单张图片的地址
                    let imageUrl = status.pic_urls?.first?.thumbnail_pic
                    
                    //原创微博有单张图片
                    SDWebImageManager.shared().loadImage(with: URL(string:imageUrl!), options: [], progress: nil, completed: { (image, data, error, _, _, _) in
                        
                        print("原创微博单张图片下载完成")
                        
                        //离开调度组
                        group.leave()
                    })
                    
                }
                
                if status.retweeted_status?.pic_urls?.count == 1 {
                    
                    //加入到调度组
                    group.enter()
                    
                    //获取单张图片的地址
                    let imageUrl = status.retweeted_status?.pic_urls?.first?.thumbnail_pic
                    
                    //转发微博有单张图片
                    SDWebImageManager.shared().loadImage(with: URL(string:imageUrl!), options: [], progress: nil, completed: { (image, data, error, _, _, _) in
                        
                        print("转发微博单张图片下载完成")
                        
                        //离开调度组
                        group.leave()
                    })
                    
                }
                
                
                
            }
            
            //保存数据源
            //self.statusList = tempArray
            if isPullup {
                
                //上拉加载
                self.statusList.append(contentsOf:tempArray)
                
            } else {
                
                //下拉刷新
                self.statusList.insert(contentsOf:tempArray, at: 0)
            }
            
            if tempArray.count > 0 {
                
                message = "加载了\(tempArray.count)条微博数据"
            }
            
            //调度组里面的任务都执行完成后回调闭包
            group.notify(queue: DispatchQueue.main, execute: { 
                
                //让tableView重新加载数据
                print("所有的单张图片都加载完成了")
                
                callBack(true, message)
            })
            
            //让tableView重新加载数据
            //self.tableView.reloadData()
            //callBack(true)
            
        }
        
        
    }


}
